在大型專案裡,通常我們還會透過 webpack、將 JavaScript、CSS、圖片做模組化,藉著 webpack 的設定、統一管理檔案,讓開發更單純。
sw-precache-webpack-plugin 是一個 Webpack plugin,底層使用 sw-precache,可以透過的 sw-precache
設定、來生成 Service Worker 檔案。
針對 Service Work 和 sw-precache,若有不清楚的地方、可以參考之前分享的文章:
我們可以透過 npm
進行安裝:
npm install --save-dev sw-precache-webpack-plugin
var path = require('path');
var SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
module.exports = {
context: __dirname,
entry: {
main: path.resolve(__dirname, 'src/index'),
},
output: {
path: path.resolve(__dirname, 'src/bundles/'),
filename: '[name]-[hash].js',
},
plugins: [
new SWPrecacheWebpackPlugin(
{
cacheId: 'my-project-name',
filename: 'my-service-worker.js',
maximumFileSizeToCacheInBytes: 4194304,
runtimeCaching: [{
handler: 'cacheFirst',
urlPattern: /[.]mp3$/,
}],
}
),
]
}
cacheId
[String](非必填但應該要填): 設定 cache 的 unique 名稱filename
[String](非必填): 用來指定產出的檔案名稱,上方範例的檔名是 my-service-worker.js
,預設檔名為 service-worker.js
filepath
[String](非必填): 用來指定產出的檔案路徑和名稱,上方範例沒有設定 ,預設使用 webpack.output.path
+ options.filename
,範例中設定 output 的路徑為 src/bundles/
, 所以自動產生的 Service Worker 檔案會在 src/bundles/my-service-worker.js
裡。maximumFileSizeToCacheInBytes
: 設定 Cache 的最大檔案限制、單位為byte,範例為 4194304
(4 MB)runtimeCaching
: 用來處理 cache
的行為, runtimeCaching.urlPattern
和 runtimeCaching.handler
為必填
runtimeCaching.urlPattern
: 用 Regular Expression 或 String 去指定 URLruntimeCaching.handler
: 設定 request 的處理方式
networkFirst
: 先透過網路發送 request,如果成功取得 response 則儲存在 cache 裡,不然就回傳舊的 cache,取得基本的資料、提供頁面顯示。cacheFirst
: 先去判斷有沒有對應的 cache,如果有、就直接回傳舊的 cache,如果沒有、才透過網路發送 request,獲取資料。fastest
: 同時『透過網路發送 request』並『判斷是否有舊的 cache 可供存取』,看兩個哪一個先返回資源(若有舊的 cache 通常會優先回應),即使返回 cache,仍然會發送 request,確保更新 cache 檔案。cacheOnly
: 只會去存取 cache,如果沒有舊的 cache 可供存取,就會失敗,不會再發出 request。networkOnly
: 透過網路發送 request,如果 request 失敗,則代表請求失敗。本人小小筆記,如有錯誤或需要改進的部分,歡迎給予回饋。
我將會用最快的速度修正,m(_ _)m。謝謝